home *** CD-ROM | disk | FTP | other *** search
/ Tech Arsenal 1 / Tech Arsenal (Arsenal Computer).ISO / tek-01 / strlibs.zip / STRNLEN.ASM < prev    next >
Assembly Source File  |  1993-01-04  |  1KB  |  55 lines

  1. ;       Static Name Aliases
  2. ;
  3.         TITLE   strnlen
  4. ;       NAME    strnlen.C
  5.  
  6. ;   int strnlen(src, len)
  7. ;   returns the number of characters up to the first NUL in src, or len,
  8. ;   whichever is smaller.
  9.  
  10.         .287
  11. _TEXT   SEGMENT  BYTE PUBLIC 'CODE'
  12. _TEXT   ENDS
  13. _DATA   SEGMENT  WORD PUBLIC 'DATA'
  14. _DATA   ENDS
  15. CONST   SEGMENT  WORD PUBLIC 'CONST'
  16. CONST   ENDS
  17. _BSS    SEGMENT  WORD PUBLIC 'BSS'
  18. _BSS    ENDS
  19. DGROUP  GROUP   CONST,  _BSS,   _DATA
  20.         ASSUME  CS: _TEXT, DS: DGROUP, SS: DGROUP, ES: DGROUP
  21. EXTRN   __chkstk:NEAR
  22. _TEXT      SEGMENT
  23.         PUBLIC  _strnlen
  24. _strnlen        PROC NEAR
  25.         push    bp
  26.         mov     bp,sp
  27.         push    si
  28.  
  29. ;       s = 4
  30. ;       register si = s
  31. ;       n = 6
  32. ;       register cx = n
  33. ;       L = ax
  34.  
  35.         mov     si,[bp+4]       ;s
  36.         mov     cx,[bp+6]       ;n
  37.         xor     bx,bx                   ;L
  38. $cmp:
  39.         jcxz    cleanup
  40.         cmp     BYTE PTR [si][bx],0
  41.         je      cleanup
  42.         dec     cx
  43.         inc     bx              ;L
  44.         jmp     $cmp
  45. cleanup:
  46.         xchg    ax,bx
  47.         pop     si
  48.         mov     sp,bp
  49.         pop     bp
  50.         ret
  51.  
  52. _strnlen        ENDP
  53. _TEXT   ENDS
  54. END
  55.